cfork
cluster fork and restart easy way.
- Easy fork with worker file path
- Handle worker restart, even it was exit unexpected.
- Auto error log process
uncaughtException
event
Install
$ npm install cfork --save
Usage
Example
const cfork = require('cfork');
const util = require('util');
const clusterWorker = cfork({
exec: '/your/app/worker.js',
}).on('fork', worker => {
console.warn('[%s] [worker:%d] new worker start', Date(), worker.process.pid);
})
.on('disconnect', worker => {
console.warn('[%s] [master:%s] wroker:%s disconnect, exitedAfterDisconnect: %s, state: %s.',
Date(), process.pid, worker.process.pid, worker.exitedAfterDisconnect, worker.state);
})
.on('exit', (worker, code, signal) => {
const exitCode = worker.process.exitCode;
const err = new Error(util.format('worker %s died (code: %s, signal: %s, exitedAfterDisconnect: %s, state: %s)',
worker.process.pid, exitCode, signal, worker.exitedAfterDisconnect, worker.state));
err.name = 'WorkerDiedError';
console.error('[%s] [master:%s] wroker exit: %s', Date(), process.pid, err.stack);
})
.on('unexpectedExit', (worker, code, signal) => {
})
.on('reachReforkLimit', () => {
});
process.on('uncaughtException', err => {
});
cfork.setDisableRefork(clusterWorker, true);
Options
- exec : exec file path
- slaves : slave process config
- args : exec arguments
- count : fork worker nums, default is
os.cpus().length
- refork : refork when worker disconnect or unexpected exit, default is
true
- limit: limit refork times within the
duration
, default is 60
- duration: default is
60000
, one minute (so, the refork times
< limit / duration
) - autoCoverage: auto fork with istanbul when
running_under_istanbul
env set, default is false
- env: attach some environment variable key-value pairs to the worker / slave process, default to an empty object.
- windowsHide: Hide the forked processes console window that would normally be created on Windows systems, default to false.
- serialization: Specify the kind of serialization used for sending messages between processes. Possible values are 'json' and 'advanced'. See Advanced serialization for child_process for more details. Default: false.
License
MIT
Contributors
This project follows the git-contributor spec, auto updated at Sat May 06 2023 00:30:47 GMT+0800
.